//
//  GDMOAuthController.swift
//  SinaWeibo
//
//  Created by mac on 15/11/27.
//  Copyright © 2015年 mac. All rights reserved.
//

import UIKit

import AFNetworking

import SVProgressHUD

//使用第三方进行自动布局
//import 

class GDMOAuthController: UIViewController {
    
    
    let webView = UIWebView()
    
    //    重新加载view
    override func loadView() {
       
        view = webView
       
//        通过webView的代理的方法，在跳转页面的时候，给用户一个提示
        webView.delegate = self
        
    }

    override func viewDidLoad() {
        super.viewDidLoad()

//        加载导航条上面的按钮
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "关闭", style: .Plain, target: self, action: "close")
        
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动加载", style: .Plain, target: self, action: "defaultAccount")
        
//        跳转过来，拿到微博的接口
        loadOauthPage()
        
    }
    
//    MARK：点击导航上按钮的方法
  @objc private func close(){
        
//        让这个控制器消失
        dismissViewControllerAnimated(true, completion: nil)
        
    }
    
//    MARK :本地和JS交互
  @objc private func defaultAccount(){
        
//        这样写有提示
//        print("\(__FUNCTION__)")
    
//    document.getElementById('userId').value = '18201193478'
//    document.getElementById('passwd').value = 'gdm9365593'
    let jsString = "document.getElementById('userId').value = '18201193478' , document.getElementById('passwd').value = 'gdm9365593'"
//    这个属性的意思是可以动态的注入一些变量和方法
    webView.stringByEvaluatingJavaScriptFromString(jsString)
    
    
    }
    
//    MARK 加载webView上的页面
   private func loadOauthPage(){
    
//    获取url，点击登录之后，反馈回来的界面是百度的
    let urlStr = "https://api.weibo.com/oauth2/authorize" + "?client_id=" + "1726536435" + "&redirect_uri" + "=http://www.baidu.com"
    
//    开始发送请求
    if let url = NSURL(string: urlStr){
        
        let request = NSURLRequest(URL: url)
        
//        跟新到webView上
        webView.loadRequest(request)
        
    }
  }
}

//  MARK 类的延展,实现webView的代理的方法
extension GDMOAuthController : UIWebViewDelegate {
    
    func webViewDidFinishLoad(webView: UIWebView) {
        
//        让那个效果消失
        SVProgressHUD.dismiss()
        
    }
    
    func webViewDidStartLoad(webView: UIWebView) {
        
//        开始加载的时候开启转得那个效果
        SVProgressHUD.show()
        
    }
    
    /**
     shouldStartLoadWithRequest  外部参数，用来别人给你传值的
     
     - parameter webView:        内部参数
     - parameter request:        内部参数，就是别人给你一个外部参数，你自己发送请求
     
     现在的返回值是一个BOOL类型 要是返回一个true就可以正常的工作，要是返回一个flase就不是不能正常的工作，就吧能加载自己设置的返回来的那个界面
     */
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
//        通过打印这个请求回来的内容，可以设置不让用户去做某一件事情，
        /**
        *  第一次点击登录加载的网页就是自己拼接的页面，输入账号密码登录成功之后会给你反馈回来一个网页
        URL: https://api.weibo.com/oauth2/authorize?client_id=1726536435&redirect_uri=http://www.baidu.com
        
        点击注册
         URL: http://m.weibo.cn/reg/index?jp=1&wm=4406&appsrc=2Mrqqn&backURL=https%3A%2F%2Fapi.weibo.com%2F2%2Foauth2%2Fauthorize%3Fclient_id%3D1726536435%26response_type%3Dcode%26display%3Dmobile%26redirect_uri%3Dhttp%253A%252F%252Fwww.baidu.com%26from%3D%26with_cookie%3D
        
        点击登录
        URL: https://api.weibo.com/oauth2/authorize
        
        点击授权
        <NSMutableURLRequest: 0x7ff95502d5b0> { URL: https://api.weibo.com/oauth2/authorize# }
        <NSMutableURLRequest: 0x7ff955265310> { URL: https://api.weibo.com/oauth2/authorize }
        <NSMutableURLRequest: 0x7ff955138b90> { URL: http://www.baidu.com/?code=281faf43b861adb0577ba8e817ddf243 }
        <NSMutableURLRequest: 0x7ff9554106a0> { URL: https://m.baidu.com/?code=281faf43b861adb0577ba8e817ddf243&from=844b&vit=fps }
        <NSMutableURLRequest: 0x7ff9551af320> { URL: about:blank }
        
        */
        
//        在使用一些大的平台的时候可以允许注册，到时不希望在往里面深入
//        print(request)
        
//        根据这个请求进行屏蔽
//        把请求的地址转成一个字符串
        let urlString = request.URL?.absoluteString ?? ""
        
        if urlString.hasPrefix("https://api.weibo.com/") {
            
            return true
        }
        
//        现在这一句为了是拿到后面的那个code，组成一个token,使用的是非是因为屏蔽让他在调到那个界面
        if !urlString.hasPrefix("http://www.baidu.com/") {
            
            return false
        }
        
//        获取授权码，要是使用if就是可以获取得到，代码会很多，因为有很多的分支
//        获取的就是code后面的内容
        guard let querg = request.URL?.query else {
            
//            获取不到授权码
            return false
        }
        
//        根据这个打印可以拿到呢个code但是我们需要的是=号后面的内容，所以需要字符串的截取
//      print(querg)
        let codeStr = "code="
        
        let code = querg.substringFromIndex(codeStr.endIndex)
        
//        print(code)
//        获取网络token
//        loadAccessToken(code)
        GDMAccountViewModel().loadAccessToken(code) { (error) -> () in
            
            if error != nil {
                
                SVProgressHUD.showErrorWithStatus("获取网络数据失败，请稍后再试")
                
                return
            }
            
            SVProgressHUD.showSuccessWithStatus("登录成功")
            
            //        为了更好的区分，点击登录之后就让那个界面，判断是谁发送过来的通知进行判断,跳转正常的界面
            
            //        现在的这个控制器本是Basic这个控制器model出来的，所以这个控制器的销毁本是那个控制器管理的，开始是使用代理的方式，但是现在已经给封装好了，直接调用这个就可以了，其实他的底层还是通过代理实现的，当你在completion里做一些事情的时候他才会正真的回收
            //        本质上就是调用了这个方法之后，他就会告诉model出这个控制器 的 控制器 要回收，那个控制器就会等待执行完毕completion里面的内容就回收那块内存
            
            //        在这里会有很多的控制器累加起来的原因就是，在我发送通知的时候，那个控制器还并没有立即的收回，他就开始跳转另一个界面了，由此上一个控制器就在这个控制器的下面了，
            
            //        避免上面的情况的发生,去掉动画的效果，在跳转界面的时候就不会来回的跳动
            self.dismissViewControllerAnimated(false) { () -> Void in
        
                NSNotificationCenter.defaultCenter().postNotificationName(WBSwitchRootVCNotification , object: "welcome")
            }
    
            //    代码要是放在这里，他会先执行这里，在执行加载数据，所以把跳转拿到上面去
        }

        return false
    }
}
